<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once(APPPATH."models/turmamodel.php");


class turmadao extends CI_Model {
	
	function __construct(){
	
		parent::__construct();
	
	}
	public function excluir($id){
		try{
			$exec = $this->db->query("call excluirTurmaById(".$id.")") or die("Erro: " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$d = $exec->row();
				$erro = (int)$d->erro;
				$this->db->close();
				if($erro == 0){
					return true;
				}
				$this->db->close();
				return false;
			}
			$this->db->close();
			return false;
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch (Exception $a){
	
			}
		}
		return false;
	}
	
	public function getTurmasByIdMateria($idMateria, $idProfessor){
		try {
			$exec = $this->db->query("call getTurmasByIdMateria(".$idMateria.", ".$idProfessor.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaTurma = array();
				foreach($exec->result() as $dados){
					$turma = new TurmaModel();
					
					$turma->setIdTurma($dados->idturma);
					$turma->setAno($dados->ano);
					$turma->setNome($dados->nomeTurma);
					$turma->serie->setIdSerie($dados->idserie);
					$turma->serie->setIdEnsino($dados->idensino);
					array_push($listaTurma, $turma);
				}
				$this->db->close();
				return $listaTurma;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return null;
	}
	
	public function getTurmaById($id){
		try{
			$exec = $this->db->query("call getTurmaById(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$turma = new TurmaModel();
				$turma->setIdTurma($dados->idturma);
				$turma->setAno($dados->ano);
				$turma->setNome($dados->nomeTurma);
				$turma->serie->setIdSerie($dados->idserie);
				$turma->serie->setIdEnsino($dados->idEnsino);
				$this->db->close();
				return $turma;
			}
			$this->db->close();
			return null;
		} catch (Exception $e){
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
		return null;
	}
	
	
	public function getTurmasBusca($busca){ 
		try {
			$exec = $this->db->query("call getTurmasBusca('".$busca."')") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaTurmas = array();
				foreach($exec->result() as $dados){
					$turma = new TurmaModel();
					$turma->setIdTurma($dados->idTurma);
					$turma->setAno($dados->ano);
					$turma->setNome($dados->nomeTurma);
					$turma->serie->setIdEnsino($dados->idEnsino);
					$turma->serie->setIdSerie($dados->idSerie);
					$turma->serie->setSerie($dados->serie);
					$turma->serie->setStrSerie($dados->strSerie);
					array_push($listaTurmas, $turma);
				}
				$this->db->close();
				return $listaTurmas;
			}
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch(Exception $e){
					
			}
		}
		return null;
	}
	
	public function getTurmas(){ //Traz as turmas do ano vigente
		try {
			$exec = $this->db->query("call getTurmas()") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaTurmas = array();
				foreach($exec->result() as $dados){
					$turma = new TurmaModel();
					$turma->setIdTurma($dados->idTurma);
					$turma->setAno($dados->ano);
					$turma->setNome($dados->nomeTurma);
					$turma->serie->setIdEnsino($dados->idEnsino);
					$turma->serie->setIdSerie($dados->idSerie);
					$turma->serie->setSerie($dados->serie);
					$turma->serie->setStrSerie($dados->strSerie);
					array_push($listaTurmas, $turma);
				}
				$this->db->close();
				return $listaTurmas;
			}
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch(Exception $e){
			
			}
		}
		return null;
	}
	
	/**
	 * 
	 * @param unknown_type $idTurma
	 * @param unknown_type $alunos
	 * @return multitype:|boolean
	 */
	public function relacionarTurmaAluno($idTurma, $alunos = array()){
		try {
			$this->db->query("call removerAlunosTurma(".$idTurma.")") or die("Erro : " . $this->db->_error_message());
			$this->db->close();
			$flag = false;
			$idExistente = array();
			if(is_array($alunos) && count($alunos) > 0){
				
				foreach($alunos as $idAluno){
					$exec = $this->db->query("call relacionarAlunoTurma(".$idTurma.", ".$idAluno.")") or die("Erro : " . $this->db->_error_message());
					$d = $exec->row();
					$ret = (int)$d->erro;
					if($ret == -2){
						$flag = true;
						array_push($idExistente, $idAluno);
					}
					$this->db->close();
				}
				
			}
			$this->db->query("call reordenarAlunos(".$idTurma.")") or die("Erro : " . $this->db->_error_message());
			$this->db->close();
			if($flag){
				return $idExistente;
			} else {
				$idExistente = null;
				return true;
			}
			
			$this->db->close();
			return false;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
		return false;
	}
	
	/**
	 * -2 = Aluno alterado de turma, 0 = inserido na turma, -1 aluno já estava relacionado
	 * @param unknown_type $idAluno
	 * @param unknown_type $idTurma
	 * @return number|NULL
	 */
	public function inserirTurmaAluno($idAluno, $idTurma){
		try {
			$exec = $this->db->query("call inserirTurmaAluno(".$idAluno.", ".$idTurma.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$erro = (int)$dados->erro;
				$this->db->close();
				if($erro == 0){
					$erro = 11;
				}
				return $erro;
				
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return null;
	}
	
	public function getListaSerieTurmaByIdEnsino($idEnsino){
		try {
			$exec = $this->db->query("call getTurmaSerieByEnsino(".$idEnsino.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaTurmas = array();
				foreach($exec->result() as $dados){
					$turma = new TurmaModel();
					$turma->setIdTurma($dados->idTurma);
					$turma->setAno($dados->ano);
					$turma->setNome($dados->nomeTurma);
					$turma->serie->setIdEnsino($dados->idensino);
					$turma->serie->setIdSerie($dados->idserie);
					$turma->serie->setSerie($dados->serie);
					$turma->serie->setStrSerie($dados->strSerie);
					array_push($listaTurmas, $turma);
				}
				$this->db->close();
				return $listaTurmas;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch(Exception $a){
			}
		}
	}
	
	public function getTurmaByIdSerie($idSerie){
		try {
			$exec = $this->db->query("call getTurmaBySerie(".$idSerie.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				// continuar ou nao
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
		return null;
	}
	
	public function inserirEditar($idTurma, $idSerie, $turma){
		try {
			$exec = $this->db->query("call inserirEditarTurma(".$idTurma.", ".$idSerie.", '".$turma."')") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$tipo = $dados->tipo;
				$erro = (int)$dados->erro;
				$this->db->close();
				if($tipo == "update"){
					if($erro == 0){
						return 1; // Editado com sucesso;
					}
					elseif($erro == -1){
						return -1; // Não encontrado para editar;
					}
				} else {
					return -99; //Inserido com sucesso;
				}
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
		return null;
	}
	
	
	
}

?>